package lq2018;/**
 * ************************************************************************
 * 项目名称: projectweb <br>
 * 文件名称:  <br>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br>
 * 文件创建：1913040634刘世锦  <br>
 * 创建时间: 2021/3/7 <br>
 *
 * @version v1.0 <br>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br>
 * ************************************************************************
 */

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.math.BigInteger;

/**
 * @ProjectName: projectweb
 * @ClassName: 复数幂
 * @Description: 请描述该类的功能
 * @Author: 1913040634刘世锦
 * @Date: 2021/3/7 21:53 .
 * @version v1.0
 */

//标题：复数幂
//
//        设i为虚数单位。对于任意正整数n，(2+3i)^n 的实部和虚部都是整数。
//        求 (2+3i)^123456 等于多少？ 即(2+3i)的123456次幂，这个数字很大，要求精确表示。
//
//        答案写成 "实部±虚部i" 的形式，实部和虚部都是整数（不能用科学计数法表示），中间任何地方都不加空格，实部为正时前面不加正号。(2+3i)^2 写成: -5+12i，
//        (2+3i)^5 的写成: 122-597i
//
//
//        注意：需要提交的是一个很庞大的复数，不要填写任何多余内容。

public class 复数幂 {
    public static void main(String[] args) throws FileNotFoundException {  //每次的变量为a,b
        BigInteger a = BigInteger.TWO;                                    // 每一次都去乘 (2+3i) 即：与2、3进行处理
        BigInteger b =   BigInteger.valueOf(3);                           // 故要 two、three 的常量
        BigInteger two = BigInteger.valueOf(2);
       BigInteger three = BigInteger.valueOf(3);
        //int com = two.compareTo(two1);
        BigInteger bb = null;
        BigInteger aa = null;
        for (int i = 0; i <123455 ; i++) {
             aa = a.multiply(two).subtract(b.multiply(three));
             bb = b.multiply(two).add(a.multiply(three));
            a = aa;
            b = bb;


        }
        //System.out.println(aa +(bb.compareTo(BigInteger.ZERO)<0?"-":"+")+bb+"i");
        System.setOut(new PrintStream(new File("D:\\out1.txt")));
        System.out.println(aa + (bb.compareTo(BigInteger.ZERO) > 0 ? "-" : "+") + bb + "i");
    }

//    public static void main(String[] args) throws Exception {
//        BigInteger two = BigInteger.valueOf(2);
//        BigInteger three = BigInteger.valueOf(3);
//        BigInteger a = BigInteger.valueOf(2);
//        BigInteger b = BigInteger.valueOf(3);
//        BigInteger aa = null;
//        BigInteger bb = null;
//        for (int i = 0; i < 123455; i++) {
//            aa = a.multiply(two).subtract(b.multiply(three)); // a*2-(b*3)
//            bb = a.multiply(three).add(b.multiply(two));
//            a = aa;
//            b = bb;
//        }
//        System.setOut(new PrintStream(new File("D:\\out.txt")));
//        System.out.println(aa + (bb.compareTo(BigInteger.ZERO) > 0 ? "-" : "+") + bb + "i");
//    }


}
